冒泡排序的每一个元素都可以像小气泡一样，根据自身大小，一点一点地向着 数组的一侧移动。算法的每一轮都是从左到右来比较元素，进行单向的位置交换 的。

鸡尾酒排序的元素比较和交换过程是双向的。

下面举一个例子。
由 8 个数字组成一个无序数列{2,3,4,5,6,7,8,1}，希望对其进行从小到大的 排序。

元素 2、3、4、5、6、7、8 已经是有序的了，只有元素 1 的位置不对，却还要进行 7 轮排序，这也太“憋屈”了吧!

没错，鸡尾酒排序正是要解决这个问题的。

```js
let arr = [2, 3, 4, 5, 6, 7, 8, 1];
let tem = 0;
for (let i = 0; i < arr.length / 2; i++) {
  //有序标记，每一轮的初始值都是true
  let isSorted = true;

  // 奇数轮从左向右进行比较和交换
  for (let j = i; j < arr.length - 1 - i; j++) {
    if (arr[j] > arr[j + 1]) {
      tem = arr[j];
      arr[j] = arr[j + 1];
      arr[j + 1] = tem;
      isSorted = false; // 有元素交换所以不是有序的，标识为false
    }
  }

  if (isSorted) break;

  // 在偶数轮之前，将isSorted重新标记为true
  isSorted = true;

  // 偶数轮从右到左进行交换。
  for (let j = arr.length - 1; j > i; j--) {
    if (arr[j] < arr[j - 1]) {
      tem = arr[j];
      arr[j] = arr[j - 1];
      arr[j - 1] = tem;
      isSorted = false; // 有元素交换所以不是有序的，标识为false
    }
  }

  if (isSorted) break;
}

console.log(arr);
```
